import axios from "axios";
import { useUserStore } from "@/store";
import router from "@/router";
import { showToast } from "@/utils/vant-ui";
// http://172.26.8.168:8080
const baseURL = import.meta.env.DEV ? "/api" : "http://localhost:8080";
const instance = axios.create({
  baseURL,
  timeout: 5000,
});
// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    console.log("这里开始发请求，对请求进行操作");
    const userStore = useUserStore();
    // 登录后，所有请求都需要在header中添加token
    if (userStore.token) {
      config.headers.Authorization = userStore.token;
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 对响应数据做点什么
    console.log("这里收到响应，对响应进行操作");
    // 业务成功,直接返回数据
    if (response.data.code === 200) {
      return response;
    }
    // 对响应错误做点什么
    showToast({
      message: response.data.msg,
      onClose: () => {
        // 重新刷新页面
        router.go(0);
      },
    });
    return Promise.reject(response.data);
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // status为401
    console.dir(error.response);
    // 服务器的错误，与前端无关
    if (error.response?.status === 500) {
      console.log(error.response.status);
      showToast({
        message: "服务器错误，请稍后再试",
        onClose: () => {
          // 刷新页面
          router.go(0);
        },
      });
    } else if (error.response?.data.code === 401) {
      // 登录过期
      // 2.提示用户
      showToast({
        message: "登录过期，请重新登录",
        onClose: async () => {
          // 跳转到登录页面
          router.push("/login");
          router.go(0);
          // 删除token
          useUserStore().removeToken();
          // 删除用户信息
          useUserStore().removeUser();
        },
      });
    } else {
      showToast(error.response?.data.msg);
    }
    return Promise.reject(error);
  },
);
export default instance;
export { baseURL };
